package cn.zyb.controller;

import cn.zyb.domain.User;
import cn.zyb.utils.FuseDowngradeUtil;
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope // 动态刷新配置注解
public class UserController {

    @Value("${server.port}")
    private String port;


    //    @GetMapping("/getById/{id}")
//    @SentinelResource(value="getById", blockHandler = "limitMethod")
//    public User getById(@PathVariable("id") Long id){
//        return new User(id,"源码时代","我在源码时代学习Java!，端口号："+port);
//    }
    //本类调用
//    public User limitMethod(@PathVariable("id") Long id, BlockException e){
//        e.printStackTrace();
//        return new User(-1L, "服务降级触发！", "当前服务流量过大，请稍后重试！");
//    }

    //降级类
//    @GetMapping("/getById/{id}")
//    @SentinelResource(value = "getById", blockHandler = "LimitMethod", blockHandlerClass = LimitMethodUtil.class)
//    public User getById(@PathVariable("id") Long id) {
//        return new User(id, "源码时代", "我在源码时代学习Java!，端口号：" + port);
//    }

//    @GetMapping("/getById/{id}")
//    @SentinelResource(value="getById", fallback = "fuseDegradation")
//    public User getById(@PathVariable("id") Long id){
//        try {
//            // 用于让服务慢响应
//            Thread.sleep(1000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        return new User(id, "源码时代", "我在源码时代学习Java!，端口号：" + port );
//    }
//    //本类调用熔断
//    public User fuseDegradation(@PathVariable("id") Long id, Throwable  e){
//        e.printStackTrace();
//        return new User(-1L, "熔断服务降级触发！", "服务不可用，请稍后重试！");
//    }

    @GetMapping("/getById/{id}")
    @SentinelResource(value="getById", fallback = "fuseDegradation", fallbackClass = FuseDowngradeUtil.class)
    public User getById(@PathVariable("id") Long id){
//        try {
//            // 用于让服务慢响应
//            Thread.sleep(1000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        return new User(id, "源码时代", "我在源码时代学习Java!，端口号：" + port);
    }





}
